package day5.sss;


import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

//选做题--- 综合类
//实现一个学生类(学号(String) 姓名(String)  专业(String)  成绩(double)...)
// 要实现一个学生成绩管理系统(可以通过Map集合来存储key:存储学号  value:存储学生对象)
//效果如下: ----------
//XXXX学生成绩管理
//1.查询学生信息
//2.新增学生信息
//3.批量删除学生信息
//4.退出系统
//--------------------
//要求1:可以支持程序重启还可以查询之前的学生信息(提示:要做序列化和反序列化)
//要求2:实现新增学生信息
//要求3:支持按照学号查询学生信息(支持模糊查询 比如: 输入学号001 可以查询出 sc001, sc0010,...)
//(提示:输入的搜索信息 只要是学生学号包含的信息都可以查询出来)
//要求4:支持批量删除 学生信息 可以输入多个学号 可以通过删除多个学生信息
//(提示:控制台输入sc001,sc002,sc003 然后通过字符串分割split()进行分组找到所有要删除的学号...)
//要求5:...其他功能自行扩展...
public class StudentScoreSystem {

    static Map<String, Student> sMap = new HashMap<>();
    static Scanner sc = new Scanner(System.in);

    static {
        input();
    }

    public static void main(String[] args) {
        menu();
    }

    public static void menu() {

        System.out.println("==========学生成绩管理系统==========");
        while (true) {
            System.out.println("1.查询学生信息");
            System.out.println("2.新增学生信息");
            System.out.println("3.批量删除学生信息");
            System.out.println("4.查询所有学生信息");
            System.out.println("5.退出系统");
            int n = sc.nextInt();
            switch (n) {
                case 1:
                    show();
                    break;
                case 2:
                    add();
                    break;
                case 3:
                    deletes();
                    break;
                case 4:
                    showAll();
                    break;
                case 5:
                    System.out.println("成功退出 学生成绩管理系统!");
                    return;
            }
        }
    }

    //查询学生信息
    public static void show() {
        System.out.println("请输入要查询的学号:");
        String id = sc.next();
        int keySize = sMap.keySet().size();
        String[] keys = new String[keySize];
        sMap.keySet().toArray(keys);
        //将sMap的key加入到String数组中
        //判断String数组包含的id的值
        //判断sMap的key是否包含搜索的id
        //包含就打印key的键值对
        boolean b = false;
        for (int i = 0; i < keys.length; i++) {
            if (keys[i].contains(id)) {
                System.out.println("学号: " + keys[i] + "\t" + " " + sMap.get(keys[i]));
            }
        }

        if (sMap.isEmpty()) {
            System.out.println("暂时没有信息!");
        }
    }

    public static void showAll() {
        for (String s : sMap.keySet()) {
            System.out.println("学号: " + s + "\t" + " " + sMap.get(s));
        }
    }


    //新增学生信息
    public static void add() {
        Student s = new Student();
        System.out.println("请输入学号:");
        String id = sc.next();
        for (String key : sMap.keySet()) {
            if (key.equals(id)) {
                System.out.println("账号已存在!");
                return;
            }
        }
        System.out.println("请输入学生姓名:");
        String name = sc.next();
        System.out.println("请输入学生专业:");
        String specialty = sc.next();
        System.out.println("请输入学生分数:");
        double score = sc.nextDouble();
        s.setId(id);
        s.setName(name);
        s.setSpecialty(specialty);
        s.setScore(score);
        sMap.put(id, s);
        output();
    }

    //批量删除学生信息
    public static void deletes() {
        System.out.println("请输入要删除的学号:");
        String n = sc.next();
        String[] delete = n.split(",");
        for (String s : delete) {
            if (sMap.containsKey(s)) {
                sMap.remove(s);
            }
        }
        output();
        System.out.println("删除成功!");
    }

    //将java对象写入到文件中
    public static void output() {
        try {
            FileOutputStream fos = new FileOutputStream("d://a//studentInfo.txt");
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(sMap);
            System.out.println("集合更新成功!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //将文件中的java对象读取出来
    public static void input() {
        try {
            FileInputStream fis = new FileInputStream("d://a//studentInfo.txt");
            ObjectInputStream ois = new ObjectInputStream(fis);
            sMap = (Map<String, Student>) ois.readObject();
            System.out.println("资源加载成功!");
        } catch (FileNotFoundException e) {
            System.out.println("欢迎第一次使用!");
        } catch (ClassNotFoundException | IOException e) {
            e.printStackTrace();
        }
    }
}
